// 路由鉴权，项目当中的路由能不能被访问的权限设置（某个路由在上面条件下考验访问）
import router from "./router";
import nprogress from 'nprogress'
import setting from "./setting";
import { ElMessageBox } from "element-plus";
// 引入进度条的样式
import 'nprogress/nprogress.css'
nprogress.configure({ showSpinner: false })
// 获取用userStore内部token，判断用户是否登录成功
import useUserStore from "./store/modules/user";
// 全局守卫：项目当中任意路由切换都会触发的钩子
// 全局前置守卫
router.beforeEach(async (to: any, from: any, next: any) => {
    // 访问某一个路由之前的守卫
    // to:你将要访问的路由对象
    // from：你从哪个路由而来
    // next：路由的放行函数
    const userStore = useUserStore()
    nprogress.start()
    const token = userStore.token
    const username = userStore.username
    // 用户登录判断
    if (token) {
        // 不能访问，指向首页
        if (to.path == '/login') {
            next({ path: '/' })
        }
        else {
            if (username) {
                next()
            } else {
                // 在其余页面下进行刷新操作
                try {
                    // 获取用户信息
                    await userStore.userInfo()
                    next()
                } catch (error) {
                    // token过期->无法找到用户信息
                    // 用户手动修改本地存储的token
                    await ElMessageBox.alert('token已过期', '提示', {
                        confirmButtonText: '返回登录',
                        type: 'warning',
                        draggable: true,
                    })
                    await userStore.userLogout()
                    next({ path: '/login', query: { redirect: to.path } })
                }
            }
        }
    } else {
        // 用户未登录的判断
        if (to.path == '/login') {
            next()
        }
        else {
            next({ path: '/login', query: { redirect: to.path } })
        }
    }
})
// 全局后置守卫
router.afterEach((to: any, from: any) => {
    document.title = `${setting.title}-` + to.meta.title
    nprogress.done()
})

// 1.任意路由要实现切换实现进度业务
// 2.路由鉴权 未登录->仅能访问login 登录->不能访问login